home *** CD-ROM | disk | FTP | other *** search
- unit Strm2u;
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, StdCtrls, ExtCtrls, Buttons;
-
- type
- TPointData = class(TComponent)
- public
- FX, FY: Word;
- constructor CreateXY(AOwner: TComponent; AX, AY: Word);
- procedure SwapXY;
- published
- property X: Word read FX write FX default 0;
- property Y: Word read FY write FY default 0;
- end;
-
- TForm1 = class(TForm)
- PaintBox1: TPaintBox;
- Bevel1: TBevel;
- MakeBtn: TButton;
- SaveBtn: TButton;
- LoadBtn: TButton;
- SwapBtn: TButton;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure PaintBox1Paint(Sender: TObject);
- procedure MakeBtnClick(Sender: TObject);
- procedure SaveBtnClick(Sender: TObject);
- procedure LoadBtnClick(Sender: TObject);
- procedure SwapBtnClick(Sender: TObject);
- private
- PointList: TList;
- procedure ClearPoints;
- end;
-
- var
- Form1: TForm1;
- Pt: TPointData;
- Loop: Integer;
-
- const
- DataFile = 'POINTS2.DAT';
-
- implementation
-
- {$R *.DFM}
-
- constructor TPointData.CreateXY(AOwner: TComponent; AX, AY: Word);
- begin
- inherited Create(AOwner);
- FX := AX;
- FY := AY;
- end;
-
- procedure TPointData.SwapXY;
- begin
- Tag := FX;
- FX := FY;
- FY := Tag;
- end;
-
- procedure TForm1.ClearPoints;
- begin
- while PointList.Count > 0 do
- begin
- TPointData(PointList[0]).Free;
- PointList.Delete(0);
- end;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- PointList := TList.Create;
- end;
-
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- PointList.Free;
- end;
-
- procedure TForm1.PaintBox1Paint(Sender: TObject);
- begin
- for Loop := 0 to PointList.Count - 1 do
- begin
- Pt := TPointData(PointList[Loop]);
- if Loop = 0 then
- PaintBox1.Canvas.MoveTo(Pt.X, Pt.Y)
- else
- PaintBox1.Canvas.LineTo(Pt.X, Pt.Y)
- end;
- end;
-
- procedure TForm1.MakeBtnClick(Sender: TObject);
- begin
- ClearPoints;
- for Loop := 1 to Random(40) + 1 do
- begin
- Pt := TPointData.CreateXY(Self,
- Random(PaintBox1.Width),
- Random(PaintBox1.Height));
- PointList.Add(Pt);
- PaintBox1.Invalidate;
- end;
- end;
-
- procedure TForm1.SaveBtnClick(Sender: TObject);
- var
- Stream: TFileStream;
- begin
- Stream := TFileStream.Create(DataFile, fmCreate);
- try
- for Loop := 0 to PointList.Count - 1 do
- begin
- Pt := TPointData(PointList.Items[Loop]);
- Stream.WriteComponent(Pt);
- end;
- finally
- Stream.Free;
- end;
- ClearPoints;
- Invalidate;
- end;
-
- procedure TForm1.LoadBtnClick(Sender: TObject);
- var
- Stream: TFileStream;
- begin
- ClearPoints;
- Stream := TFileStream.Create(DataFile, fmOpenRead or fmShareDenyWrite);
- try
- while Stream.Position <> Stream.Size do
- {$ifdef OldHat}
- begin
- Pt := TPointData.Create(Self);
- Stream.ReadComponent(Pt);
- PointList.Add(Pt);
- end;
- {$else}
- PointList.Add(Stream.ReadComponent(nil));
- {$endif}
- finally
- Stream.Free;
- end;
- Invalidate;
- end;
-
- procedure TForm1.SwapBtnClick(Sender: TObject);
- begin
- for Loop := 0 to PointList.Count - 1 do
- TPointData(PointList[Loop]).SwapXY;
- Invalidate;
- end;
-
- initialization
- Randomize;
- RegisterClass(TPointData);
- end.
-